package com.example.day1;

// 要想成为合格函数:引用的外部数据必须是不可变的（除参数外）
public class Sample2 {

    public static void main(String[] args) {
        System.out.println(pray("张三"));
        System.out.println(pray("张三"));
        System.out.println(pray("张三"));
        // buddha.name = "魔王";
        System.out.println(pray("张三"));
    }

//    static class Buddha {
//        final String name;
//
//        public Buddha(String name) {
//            this.name = name;
//        }
//    }

    record Buddha(String name) {
    }

    static Buddha buddha = new Buddha("如来");

    // pray不是一个合格的函数,因为他引入了外部一个可变的数据,也就是buddha.name
    // 解决方法就是给name变量加上final修饰,这样就是不可变的
    // 或者也可以使用jdk16提供的record类
    // record类的特点 会给字段自动的加上private final修饰 生成公共的构造函数 getter方法 equals方法 hashCode方法 toString方法
    static String pray(String person) {
        return (person + "向[" + buddha.name + "]虔诚祈祷");
    }
}
